﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

class BMW {
public:
	BMW(int a) {
		cout << "BMW构造函数" << endl;
		this->a = a;
	}
	~BMW() {
		cout << "BMW析构函数" << endl;
	}
private:
	int a;
};

class Buick {
public:
	// 构造函数中，会调用成员变量的构造函数 
	Buick() {
		cout << "Buick构造函数" << endl;
	}
	Buick(int b, int c) {
		cout << "Buick构造函数" << endl;
	}
	// 析构函数中，会调用成员变量的析构函数 
	~Buick() {
		cout << "Buick析构函数" << endl;
	}
private:
	int b;
	int c;
};

class Maker {
public:
	// 成员变量初始化列表，只能写在构造函数上，格式为：<构造函数>(<参数>) : <成员变量>(<参数>) 
	// 成员变量初始化列表的作用就是指定调用成员变量的哪个构造函数 
	Maker() : bmw(10) {
		cout << "Maker构造函数" << endl;
	}
	Maker(int a) : bmw(a) {
		cout << "Maker有参构造函数，a=" << a << endl;
	}
	Maker(int a, int b, int c) : bmw(a),bui(b, c) {
		cout << "Maker有参构造函数，a=" << a << endl;
	}
	~Maker() {
		cout << "Maker析构函数" << endl;
	}
private:
	BMW bmw;
	Buick bui;

};

void test01() {
	Maker m; 
	Maker m1(10);
	Maker m2(8, 15, 100);
}

int main()
{
	/*BMW构造函数
	Buick构造函数
	Maker构造函数
	Maker析构函数
	Buick析构函数
	BMW析构函数*/
	test01(); 

	system("pause");
	return EXIT_SUCCESS;
}